package co.com.inversiones.xyz.ltda.server.server;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import co.com.inversiones.xyz.ltda.bl.SolicitudBl;
import co.com.inversiones.xyz.ltda.bl.UsuarioBl;
import co.com.inversiones.xyz.ltda.dto.Solicitud;
import co.com.inversiones.xyz.ltda.dto.Usuario;
import co.com.inversiones.xyz.ltda.shared.MyGWTException;
import co.com.inversiones.xyz.ltda.shared.UsuarioGWT;
import co.com.inversiones.xyz.ltda.client.server.SolicitudService;
import co.com.inversiones.xyz.ltda.shared.SolicitudListado;
import co.com.inversiones.xyz.ltda.exception.*;

import com.google.gwt.rpc.client.impl.RemoteException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class SolicitudServiceImpl extends RemoteServiceServlet implements SolicitudService {

	@Override
	public void guardarSolicitud(int sucursal, String tipo, String estado,
			String nombreCliente, String correo, String celular, String texto,
			String producto) throws MyGWTException {
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		
		HttpServletRequest req = this.getThreadLocalRequest();
		HttpSession ses = req.getSession();
		
		try{
			SolicitudBl solicitudBL = (SolicitudBl)webApp.getBean("SolicitudBL");
			solicitudBL.guardarSolicitud(sucursal, tipo, estado, nombreCliente, correo, celular, texto, producto);
		}catch (BlException e) {
			throw new MyGWTException(e.getMessage());
		}catch (DaoException e) {
			e.getStackTrace();
		}
		
	}

	@Override
	public
	 List<SolicitudListado> leerSolicitudesGood(String estado)
			throws MyGWTException {
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		
		List<Solicitud> lista = new ArrayList<Solicitud>();
		
		List<SolicitudListado> listaResultado = new ArrayList<SolicitudListado>();
		
		try{
			SolicitudBl solicitudBl = (SolicitudBl)webApp.getBean("SolicitudBL");
			
			lista = solicitudBl.leerSolicitudesGood(estado);
			
			for(Solicitud solicitud : lista){
				SolicitudListado cl = new SolicitudListado();
				
				cl.setEstado(solicitud.getEstado());
				cl.setIdSolicitud(solicitud.getIdSolicitud());
				cl.setFechaIngreso(solicitud.getFechaIngreso()); 
				cl.setNombreCliente(solicitud.getNombreCliente());
				cl.setTipo(solicitud.getTipo()); 
				cl.setCorreo(solicitud.getCorreo());
				cl.setProducto(solicitud.getProducto()); 
				cl.setTexto(solicitud.getTexto()); 
				listaResultado.add(cl);
			}
			
			
			
		}catch (BlException e) {
			throw new MyGWTException(e.getMessage());
		}catch (DaoException e) {
			throw new MyGWTException(e.getMessage());
		}
		
		return listaResultado;
	}

	@Override
	public UsuarioGWT getUsuario(String correo) throws MyGWTException {
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		
		Usuario lista = new Usuario();
		
		UsuarioGWT usuario = new UsuarioGWT ();
		
		try{
			UsuarioBl usuarioBl = (UsuarioBl)webApp.getBean("UsuarioBL");
			
			lista = usuarioBl.getUsuario(correo);
			
			usuario.setNombreCompleto(lista.getNombreResponsable());
			usuario.setRol(lista.getRol().getNombre()); 
					
		}catch (BlException e) {
			throw new MyGWTException(e.getMessage());
		}catch (DaoException e) {
			e.getStackTrace();
		}
		return usuario; 
	}

	@Override
	public boolean validar(String correo, String pass) throws MyGWTException {
		ServletContext sc = getServletContext();
		ApplicationContext webApp = WebApplicationContextUtils.getWebApplicationContext(sc);
		
		boolean lista = false;
		
		try{
			UsuarioBl usuarioBl = (UsuarioBl)webApp.getBean("UsuarioBL");
			
			lista = usuarioBl.validar(correo, pass);
					
		}catch (BlException e) {
			throw new MyGWTException(e.getMessage());
		}catch (DaoException e) {
			e.getStackTrace();
		}return lista; 
	}
}
